Memory is generally allocated for a program (or application) during runtime from a pool of unused memory area called a heap. Garbage collection is a form of memory management for programs during runtime. During runtime, the garbage collector attempts to identify memory allocated to objects that are in not use by the program, so that they may be deallocated (or reclaimed). An object may be in use if the object can be accessed or reached by the program's current state. Since the precise allocation of space in the heap to objects is not known in advance, the memory allocated to objects cannot be accessed via the actual address of the memory. Rather, the memory may be accessed indirectly by the program utilizing references. An object is reachable if some variable or parameter in the program environment references the object, either directly or through references from other reachable objects. Generally, the garbage collector deallocates memory allocated to objects that are not reachable and does not deallocate memory allocated to objects that are reachable.